第三十三讲 R-简单线性回归模型(1)
在“R与生物统计专题”中,我们会从介绍R的基本知识展开到生物统计原理及其在R中的实现。以从浅入深,层层递进的形式在投必得医学公众号更新。
简单线性回归
简单线性回归(simple linear-regression)是预测连续变量的最简单,最流行的技术。
它的前提假设是:结果与预测变量之间存在线性关系。
线性回归的数学公式可以写成y = b0 + b1*x + e,其中:
b0并b1称为回归beta系数或参数:
b0是回归线的截距;是x = 0时y的预测值。
b1是回归线的斜率,是与预测变量x相关的回归权重或系数。
e是误差项(也称为残差),是y中可以由回归曲线解释的部分。
下图说明了线性回归模型,其中:
最佳拟合回归线为蓝色
截距(b0)和斜率(b1)以绿色显示
误差项(e)用垂直红线表示
从上面的散点图可以看出,并不是所有的数据点都精确地落在拟合的回归线上。有些点在蓝色曲线的上方,有些在蓝色曲线的下方。总体而言,残余误差(e)的平均值约为零。
残差的平方和称为残差平方和(Residual Sum of Squares,RSS)。
拟合回归线周围的点的平均变化称为残差标准误(Residual Standard Error,RSE)。这是用于评估拟合回归模型的整体质量的指标之一。残差标准误越低越好。
由于平均误差项为零,因此可以近似估算出结果变量y,如下所示:
y ~ b0 + b1*x
在数学上,确定β系数(b0和b1),以使残差平方和尽可能小。
确定β系数的这种方法在技术上称为最小二乘回归或普通最小二乘回归。
一旦计算出β系数,就进行t检验以检查这些系数是否显着不同于零。当β系数(b1)非零时,表示在预测变量(x)与结果变量(y)之间存在显着关系。
2.1 加载所需的R包
加载所需的软件包:
tidyverse 用于数据处理和可视化
ggpubr:绘制可发表图
library(tidyverse)
library(ggpubr)
2.2 数据和问题的例子
我们将使用一组糖尿病的数据,它包含768人糖尿病相关的数据,包括怀孕情况,血糖,血压,皮肤厚度,胰岛素水平,体重指数,糖尿病谱系功能,年龄和糖尿病诊断结果(Outcome)。
如需获取数据diabetes.csv,请关注投必得医学公众号,后台回复“diabetes.csv”获取数据。
导入数据:
my_data<-read.csv('diabetes.csv')
检查数据:
dim(my_data)
[1] 768 9
head(my_data)
输出结果
Pregnancies Glucose BloodPressure SkinThickness Insulin BMI DiabetesPedigreeFunction Age Outcome
1 6 148 72 35 0 33.6 0.627 50 1
2 1 85 66 29 0 26.6 0.351 31 0
3 8 183 64 0 0 23.3 0.672 32 1
4 1 89 66 23 94 28.1 0.167 21 0
5 0 137 40 35 168 43.1 2.288 33 1
6 5 116 74 0 0 25.6 0.201 30 0
研究问题:根据血糖情况来预测胰岛素水平。
2.3可视化
创建一个散点图,显示血糖与胰岛素水平。
添加平滑线
ggplot(my_data, aes(x = Glucose, y = Insulin)) +
geom_point() +
stat_smooth()
从图中看出,血糖和胰岛素水平呈线性关系。
但同时,我们也看到血糖和胰岛素都存在数据为0的情况,这在现实生活中,是基本不存在的,所以,我们需要对数据进行一定的数据清理,删除血糖及胰岛素水平为0的数据。
new_data<-my_data[my_data$Glucose>0 & my_data$Insulin >0,]
dim(new_data)
#[1] 393 9
然后重新做图
ggplot(new_data, aes(x = Glucose, y = Insulin)) +
geom_point() +
stat_smooth()
上图显示血糖和胰岛素水平呈线性关系。这是一件好事,因为线性回归的一个重要假设是结果与预测变量之间的关系是线性和可加的。
也可以使用R函数计算两个变量之间的相关系数cor():
cor(new_data$Glucose, new_data$Insulin)
[1] 0.5811862
相关系数测量两个变量x和y之间的关联水平。它的值介于-1(完全负相关:x增加时,y减小)和+1(完全正相关:x增加时,y增大)之间。
详细内容可以参见第七讲 R-相关性分析及作图(第七讲 R-单样本T检验)
当相关系数接近0,表明变量之间的关系较弱。较低的相关性(-0.2 <x <0.2)可能表明结果变量(y)的大部分变化都无法由预测变量(x)解释。在这种情况下,我们可能应该寻找更好的预测变量。
在我们的示例中,相关系数足够大,因此我们可以继续构建y作为x的函数的线性模型。
2.4 计算回归模型
简单的线性回归试图根据血糖值来预测胰岛素水平。
线性模型方程可写为:Insulin = b0 + b1 * Glucose
R函数lm()可用于确定线性模型的β系数:
model <- lm(Insulin ~ Glucose, data = new_data)
model
输出结果
Call:
lm(formula = Insulin ~ Glucose, data = new_data)
Coefficients:
(Intercept) Glucose
-118.643 2.239
结果显示了血糖值的截距和β系数。
2.5 结果解释
从上面的输出中:
估计的回归线方程可写为:Insulin = -118.643 + 2.239 * Glucose
截距(b0)为-118.643。可以将其解释为血糖值为零时胰岛素水平。由于血糖值不可能为0,所以胰岛素水平为负数也是在可理解范围以内。
变量血糖值(b1)的回归β系数(也称为斜率)为2.239 。这意味着,对于等于每增加一个血糖单位值,胰岛素水平增加2.239个单位值。也就是说,当血糖值为100时,胰岛素水平预测为105.257,Insulin = -118.643 + 2.239 * 100 = 105.257 units。
需要注意的是,在实际临床情况下,人的血糖和胰岛素水平都是在一个范围以内波动,不可能像线性回归一样像两端无限延长,因此,我们得到的线性模型,实际上也只适用于建立该线性模型的实验数据的范围以内的数据。
2.6 回归线
要将回归线添加到散点图上,可以使用函数stat_smooth()[ggplot2]。
默认情况下,拟合线周围带有置信区间。置信带反映了该线的不确定性。如果您不想显示它,请se = FALSE在函数中指定选项stat_smooth()。
ggplot(new_data, aes(Glucose, Insulin)) +
geom_point() +
stat_smooth(method = lm)
除了建立这个回归方程式以外,我们还需要知道这个方程式中的2.239与0是否有统计学差异。
也就是说,我们现在虽然方程式已经建立,但是我们需要进一步通过统计学方法来讨论这个β系数是否有统计学意义。
关于这个内容,我们将在下一讲跟跟大家具体分享。并且进一步来深入研究这个回归方程包含的更深层次的意义,比如模型拟合质量,模型含义,模型内包含的其他有意义内容。
参考内容:
1. Alboukadel Kassambara, Machine Learning Essentials: Practical Guide in R
好了,本期讲解就先到这里。小伙伴们赶紧试起来吧。
在之后的更新中,我们会进一步为您介绍R的入门,以及常用生物统计方法和R实现。欢迎关注,投必得医学手把手带您走入R和生物统计的世界。
提前预告一下,下一讲我们继续讲解简单线性回归模型。
当然啦,R语言的掌握是在长期训练中慢慢积累的。一个人学习太累,不妨加入“R与统计交流群”,和数百位硕博一起学习。
快扫二维码撩客服,
带你进入投必得医学交流群,
让我们共同进步!
↓↓
- END -
长按二维码关注「投必得医学」,更多科研干货在等你!